package com.tencent.examples.blueking.mongo.service;

import com.tencent.bk.utils.blueking.tools.CommonSugar;
import com.tencent.bk.utils.blueking.tools.StringConverters;
import com.tencent.examples.blueking.mongo.extend.biz.CrudBiz;
import com.tencent.examples.blueking.extend.QueryParam;
import com.tencent.examples.blueking.mongo.model.InstAsst;
import com.tencent.examples.blueking.mongo.model.ObjAsst;
import com.tencent.examples.blueking.mongo.repository.InstAsstRepository;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Service
public class InstAsstService extends CrudBiz<InstAsstRepository> {

    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 获取总数
     *
     * @param map
     * @return
     */
    public Long getTotal(Map<String, String> map) {
        Query query = new Query();
        String bk_obj_id = map.get("bk_obj_id");
        String bk_inst_id = map.get("bk_inst_id");
        String bk_asst_inst_id = map.get("bk_asst_inst_id");
        String bk_asst_obj_id = map.get("bk_asst_obj_id");
        if (StringUtils.isNotBlank(bk_obj_id)) {
            query.addCriteria(Criteria.where("bk_obj_id").is(map.get("bk_obj_id")));
        }if (StringUtils.isNotBlank(bk_inst_id)) {
            query.addCriteria(Criteria.where("bk_inst_id").is(StringConverters.ToInteger(map.get("bk_inst_id"))));
        }if (StringUtils.isNotBlank(bk_asst_inst_id)) {
            query.addCriteria(Criteria.where("bk_asst_inst_id").is(StringConverters.ToInteger(map.get("bk_asst_inst_id"))));
        }if (StringUtils.isNotBlank(bk_asst_obj_id)) {
            query.addCriteria(Criteria.where("bk_asst_obj_id").is(map.get("bk_asst_obj_id")));
        }
        return mongoTemplate.count(query, InstAsst.class);
    }

    /**
     * 根据模块id查询关联表数据必须有bk_asst_obj_id
     *
     * @param bk_obj_id 模块id
     * @return
     */
    public List<ObjAsst> getObjAsstListBybk_obj_id(String bk_obj_id) {
        QueryParam queryParam = new QueryParam();
        queryParam.getSqlMap().put("bk_obj_id", bk_obj_id);
        queryParam.getSqlMap().put("bk_asst_obj_id_notNull", "true");
        return this.searchAll(queryParam);
    }

    /**
     * 根据模块id查询关联表数据必须有bk_asst_obj_id
     *
     * @param bk_obj_id 模块id
     * @return
     */
    public List<InstAsst> getInstAsstBy(String bk_obj_id,int bk_inst_id) {
        return dao.findInstAsstBy(bk_obj_id,bk_inst_id);
    }

    /**
     * 分页查询
     *
     * @param queryParam
     * @return
     */
    public List<ObjAsst> searchAll(QueryParam queryParam) {
        Query query = new Query();
        query.with(new Sort(new Sort.Order(CommonSugar.getTypedDefault(queryParam.getSort(), Sort.Direction.DESC), CommonSugar.getTypedDefault(queryParam.getSortby(), "id"))));
        Map<String, String> dataMap = queryParam.getSqlMap();
        String bk_obj_id = dataMap.get("bk_obj_id");
        if (StringUtils.isNotEmpty(bk_obj_id)) {
            query.addCriteria(Criteria.where("bk_obj_id").is(bk_obj_id));
        }
        String bk_asst_obj_id_notNull = dataMap.get("bk_asst_obj_id_notNull");
        if (StringUtils.isNotEmpty(bk_asst_obj_id_notNull)) {
            query.addCriteria(Criteria.where("bk_asst_obj_id").exists(true).ne(null).ne(""));
        }
        QueryParam.pagination(query, queryParam);//分页设置
        return mongoTemplate.find(query, ObjAsst.class);
    }
}
